<?php
namespace app\erp_meixingtiyu\logic;

use app\erp_meixingtiyu\model\Arena as ArenaModel;
use app\erp_meixingtiyu\model\BookingFragment as BookingFragmentModel;

class Arena
{
    public function addArena($data)
    {
        (new ArenaModel)->createArena($data);
    }

    public function editArena($params)
    {
        $arena = (new ArenaModel())->getArenaWithPartsById($params['arena_id']);
        $time_template_id = $arena->time_template_id;
        $parts = $arena->parts;
        $isCloseStatus = (int) $params['status'] === config('arena.status.close') && $arena->status === config('arena.status.open');
        $isChangeTemplate =
            $time_template_id !== (int) $params['time_template_id'];

        // 若要关闭场地状态,判断是否有在开启的半场，有则不允许关闭场地；
        if ($isCloseStatus && !$parts->isEmpty()) {
            // 检查所属半场的状态是否有开启的
            foreach ($parts as $part) {
                if ($part->status === 0) {
                    throw new \Exception('该场地下有半场正在使用，不能关闭该场地');
                }
            }
        }

        // 修改场地的时间模板，可能会与未来有已预订的时段冲突，所以需要添加一个判断，如果未来的时段里有用户预订了该场地的场次，则不允许修改所属的时段模板
        if ($isChangeTemplate) {
            $list = (new BookingFragmentModel)->haveBooking($params['arena_id']);
            if(!$list->isEmpty()) {
                throwError('该场地今天或未来有场次被预订，暂不能修改时段模板');
            }
        }

        $arena->updateArenaInfo(array_filter($params, function($val, $key) {
          return $key != 'arena_id';
        }, 1), $isChangeTemplate);
    }

    public function deleteArena($arenaId)
    {
        $arena = (new ArenaModel())->getArenaWithPartsById($arenaId);
        $parts = $arena->parts;
        // 若该场地下有半场正在使用，则不允许删除
        if (!$parts->isEmpty()) {
            // 检查所属半场的状态是否有开启的
            foreach ($parts as $part) {
                if ($part->status === 0) {
                    throw new \Exception('该场地下有半场正在使用，不能删除该场地');
                }
            }
        }

        $arena->delete();
    }
}
